// 判断弹出栈的顺序是否正确
// 我们这里调用std库来创建一个栈先
// 然后,遍历pushV,将值压进栈里面
// 接着,在压栈的过程中,如果popV里面的值如果和目前压的栈相同,就开始遍历popV加上出栈,直到值不符合再重新压栈
// 这样子的话,如果顺序复合,最后栈肯定是空的,只要我们检查栈是否为空,再返回值即可

class Solution 
{
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) 
    {

        stack<int> ret ;

        int right = 0 ;

        int left = 0 ;

        for (auto e : pushV)
        {

            ret.push (e) ;

            while (!ret.empty () && left < popV.size () && ret.top () == popV [left]) // 注意这里可能回出现栈为空的情况,所以为了防止越界访问,需要设立判断栈是否为空以及index是否越界的情况
            {

                ret.pop () ;

                ++left ;

            }
            
        }

        return ret.empty () ;
        
    }

};